import 'package:flutter/material.dart';
import 'package:get/get.dart'; // 导入GetX库
import '../../../service/HttpsClient.dart'; // 导入自定义的HttpsClient类
import '../../../models/focus_model.dart'; // 导入轮播图数据模型类
import '../../../models/category_model.dart'; // 导入分类数据模型类
import '../../../models/plist_model.dart'; // 导入热销臻选数据模型类

class HomeController extends GetxController {
  //TODO: Implement HomeController
  RxList<FocusItemModel> swiperList = <FocusItemModel>[].obs; // 轮播图数据
  RxList<CategoryItemModel> categoryList = <CategoryItemModel>[].obs; // 分类数据
  RxList<PlistItemModel> plistList = <PlistItemModel>[].obs; // 热销臻选数据
  RxList<PlistItemModel> bestPlist = <PlistItemModel>[].obs; // 热销臻选数据
  RxBool flag = false.obs; // 控制页面上下滑动触发导航栏动画(两边icon消失，中间搜索框变宽)--默认没有触发
  ScrollController scrollController = ScrollController(); // 页面滚动控制器
  HttpsClient httpsClient = HttpsClient(); // 创建HttpsClient实例
 

  void listScrollerHandler() {
    scrollController.addListener(() {
      if (scrollController.position.pixels > 10) {
        // 滚动距离大于10时触发导航栏动画
        if (flag.value == false) {
          // 保证大于10时，只触发一次导航栏动画
          flag.value = true; // 触发导航栏动画
          update(); // 更新页面
        }
      } else {
        if (flag.value == true) {
          // 如果已经触发过导航栏动画，则再次滚动距离小于10时，取消导航栏动画
          flag.value = false;
          update();
        }
      }
    }); // 监听滚动事件
  }

  /*
 * 获取轮播图数据
 */
  void getSwiperData() async {
    var response = await httpsClient.get('api/focus?position=2'); // 发起网络请求
    FocusModel res = FocusModel.fromJson(response);
    swiperList.value =
        res.result!; // 将数据赋值给swiperList-- res.result不为null时赋值给swiperList.value
    update(); // 更新UI
  }

  // 获取分类数据
  void getCategoryData() async {
    var response = await httpsClient.get("api/bestCate");
    CategoryModel res = CategoryModel.fromJson(response); // 将数据转换为CategoryModel
    // 整理后端返回数组为二维数组
    categoryList.value = res.result!; // 将数据赋值给categoryList
    update();
  }

  // 获取热销甄选数据
  void getPlistDate() async {
    var res = await httpsClient.get("api/plist?is_hot=1");
    PlistModel listModel = PlistModel.fromJson(res);
    plistList.value = listModel.result!; // 将数据赋值给plistList
    update();
  }

  // 获取热门推荐数据
  void getBestData() async {
    var res = await httpsClient.get("api/plist?is_best=1");
    PlistModel bestModel = PlistModel.fromJson(res);
    bestPlist.value = bestModel.result!;
    update();
  }

  @override
  void onInit() {
    // 外面访问了里面的属性或方法就会触发这个方法
    // 注意：这个onInit方法只会在page初始化的时候调用一次
    // 如一个页面同事绑定多个controller，只会触发一次，例如tabBar页面在底部切换时只会触发一次 ，后续切换不触发
    // TODO: implement onInit
    super.onInit();
    listScrollerHandler(); // 监听页面滚动事件
    getSwiperData(); // 获取轮播图数据
    getCategoryData(); // 获取分类数据
    getPlistDate(); // 获取热销甄选数据
    getBestData(); // 获取热门推荐数据
  }

  @override
  void onClose() {
    super.onClose();
  }
}
